{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Hyperparameter Optimization"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Deep-learning models are the state-of-the-art in time series forecasting. They have outperformed statistical and tree-based approaches in recent large-scale competitions, such as the M series, and are being increasingly adopted in industry. However, their performance is greatly affected by the choice of hyperparameters. Selecting the optimal configuration, a process called hyperparameter tuning, is essential to achieve the best performance.\n",
    "\n",
    "The main steps of hyperparameter tuning are:\n",
    "\n",
    " 1. Define training and validation sets.\n",
    " 2. Define search space.\n",
    " 3. Sample configurations with a search algorithm, train models, and evaluate them on the validation set.\n",
    " 4. Select and store the best model.\n",
    "\n",
    "With `Neuralforecast`, we automatize and simplify the hyperparameter tuning process with the `Auto` models. Every model in the library has an `Auto` version (for example, `AutoNHITS`, `AutoTFT`) which can perform automatic hyperparameter selection on default or user-defined search space.\n",
    "\n",
    "The `Auto` models can be used with two backends: Ray's `Tune` library and `Optuna`, with a user-friendly and simplified API, with most of their capabilities.\n",
    "\n",
    "In this tutorial, we show in detail how to instantiate and train an `AutoNHITS` model with a custom search space with both `Tune` and `Optuna` backends, install and use `HYPEROPT` search algorithm, and use the model with optimal hyperparameters to forecast."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can run these experiments using GPU with Google Colab.\n",
    "\n",
    "<a href=\"https://colab.research.google.com/github/Nixtla/neuralforecast/blob/main/nbs/examples/Automatic_Hyperparameter_Tuning.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Install `Neuralforecast`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%%capture\n",
    "!pip install neuralforecast hyperopt"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. Load Data\n",
    "\n",
    "In this example we will use the `AirPasengers`, a popular dataset with monthly airline passengers in the US from 1949 to 1960. Load the data, available at our `utils` methods in the required format. See https://nixtla.github.io/neuralforecast/examples/data_format.html for more details on the data input format."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import logging\n",
    "\n",
    "from neuralforecast.utils import AirPassengersDF"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "logging.getLogger('pytorch_lightning').setLevel(logging.ERROR)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>unique_id</th>\n",
       "      <th>ds</th>\n",
       "      <th>y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1949-01-31</td>\n",
       "      <td>112.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1949-02-28</td>\n",
       "      <td>118.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1949-03-31</td>\n",
       "      <td>132.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1949-04-30</td>\n",
       "      <td>129.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1949-05-31</td>\n",
       "      <td>121.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   unique_id         ds      y\n",
       "0        1.0 1949-01-31  112.0\n",
       "1        1.0 1949-02-28  118.0\n",
       "2        1.0 1949-03-31  132.0\n",
       "3        1.0 1949-04-30  129.0\n",
       "4        1.0 1949-05-31  121.0"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Y_df = AirPassengersDF\n",
    "Y_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Ray's `Tune` backend"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First, we show how to use the `Tune` backend. This backend is based on Ray's `Tune` library, which is a scalable framework for hyperparameter tuning. It is a popular library in the machine learning community, and it is used by many companies and research labs. If you plan to use the `Optuna` backend, you can skip this section."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.a Define hyperparameter grid"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Each `Auto` model contains a default search space that was extensively tested on multiple large-scale datasets. Search spaces are specified with dictionaries, where keys corresponds to the model's hyperparameter and the value is a `Tune` function to specify how the hyperparameter will be sampled. For example, use `randint` to sample integers uniformly, and `choice` to sample values of a list. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.a.1 Default hyperparameter grid\n",
    "\n",
    "The default search space dictionary can be accessed through the `get_default_config` function of the `Auto` model. This is useful if you wish to use the default parameter configuration but want to change one or more hyperparameter spaces without changing the other default values.\n",
    "\n",
    "To extract the default config, you need to define:\n",
    "* `h`: forecasting horizon.\n",
    "* `backend`: backend to use.\n",
    "* `n_series`: Optional, the number of unique time series, required only for Multivariate models. \n",
    "\n",
    "In this example, we will use `h=12` and we use `ray` as backend. We will use the default hyperparameter space but only change `random_seed` range and `n_pool_kernel_size`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from ray import tune\n",
    "from neuralforecast.auto import AutoNHITS"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "nhits_config = AutoNHITS.get_default_config(h = 12, backend=\"ray\")                      # Extract the default hyperparameter settings\n",
    "nhits_config[\"random_seed\"] = tune.randint(1, 10)                                       # Random seed\n",
    "nhits_config[\"n_pool_kernel_size\"] = tune.choice([[2, 2, 2], [16, 8, 1]])               # MaxPool's Kernelsize"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.a.2 Custom hyperparameter grid\n",
    "\n",
    "More generally, users can define fully customized search spaces tailored for particular datasets and tasks, by fully specifying a hyperparameter search space dictionary.\n",
    "\n",
    "In the following example we are optimizing the `learning_rate` and two `NHITS` specific hyperparameters: `n_pool_kernel_size` and `n_freq_downsample`. Additionaly, we use the search space to modify default hyperparameters, such as `max_steps` and `val_check_steps`. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "nhits_config = {\n",
    "   \"max_steps\": 100,                                                         # Number of SGD steps\n",
    "   \"input_size\": 24,                                                         # Size of input window\n",
    "   \"learning_rate\": tune.loguniform(1e-5, 1e-1),                             # Initial Learning rate\n",
    "   \"n_pool_kernel_size\": tune.choice([[2, 2, 2], [16, 8, 1]]),               # MaxPool's Kernelsize\n",
    "   \"n_freq_downsample\": tune.choice([[168, 24, 1], [24, 12, 1], [1, 1, 1]]), # Interpolation expressivity ratios\n",
    "   \"val_check_steps\": 50,                                                    # Compute validation every 50 steps\n",
    "   \"random_seed\": tune.randint(1, 10),                                       # Random seed\n",
    "}"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    ":::{.callout-important}\n",
    "Configuration dictionaries are not interchangeable between models since they have different hyperparameters. Refer to https://nixtla.github.io/neuralforecast/models.html for a complete list of each model's hyperparameters.\n",
    ":::"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.b Instantiate `Auto` model"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To instantiate an `Auto` model you need to define:\n",
    "\n",
    "* `h`: forecasting horizon.\n",
    "* `loss`: training and validation loss from `neuralforecast.losses.pytorch`.\n",
    "* `config`: hyperparameter search space. If `None`, the `Auto` class will use a pre-defined suggested hyperparameter space. \n",
    "* `search_alg`: search algorithm (from `tune.search`), default is random search. Refer to https://docs.ray.io/en/latest/tune/api_docs/suggestion.html for more information on the different search algorithm options.\n",
    "* `backend`: backend to use, default is `ray`. If `optuna`, the `Auto` class will use the `Optuna` backend.\n",
    "* `num_samples`: number of configurations explored."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this example we set horizon `h` as 12, use the `MAE` loss for training and validation, and use the `HYPEROPT` search algorithm. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from ray.tune.search.hyperopt import HyperOptSearch\n",
    "from neuralforecast.losses.pytorch import MAE\n",
    "from neuralforecast.auto import AutoNHITS"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = AutoNHITS(\n",
    "    h=12,\n",
    "    loss=MAE(),\n",
    "    config=nhits_config,\n",
    "    search_alg=HyperOptSearch(),\n",
    "    backend='ray',\n",
    "    num_samples=10,\n",
    ")"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    ":::{.callout-tip}\n",
    "The number of samples, `num_samples`, is a crucial parameter! Larger values will usually produce better results as we explore more configurations in the search space, but it will increase training times. Larger search spaces will usually require more samples. As a general rule, we recommend setting `num_samples` higher than 20. We set 10 in this example for demonstration purposes.\n",
    ":::"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.c Train model and predict with `Core` class"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we use the `Neuralforecast` class to train the `Auto` model. In this step, `Auto` models will automatically perform hyperparamter tuning training multiple models with different hyperparameters, producing the forecasts on the validation set, and evaluating them. The best configuration is selected based on the error on a validation set. Only the best model is stored and used during inference."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from neuralforecast import NeuralForecast"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Use the `val_size` parameter of the `fit` method to control the length of the validation set. In this case we set the validation set as twice the forecasting horizon."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%%capture\n",
    "nf = NeuralForecast(models=[model], freq='ME')\n",
    "nf.fit(df=Y_df, val_size=24)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The results of the hyperparameter tuning are available in the `results` attribute of the `Auto` model. Use the `get_dataframe` method to get the results in a pandas dataframe."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>loss</th>\n",
       "      <th>train_loss</th>\n",
       "      <th>timestamp</th>\n",
       "      <th>checkpoint_dir_name</th>\n",
       "      <th>done</th>\n",
       "      <th>training_iteration</th>\n",
       "      <th>trial_id</th>\n",
       "      <th>date</th>\n",
       "      <th>time_this_iter_s</th>\n",
       "      <th>time_total_s</th>\n",
       "      <th>...</th>\n",
       "      <th>config/input_size</th>\n",
       "      <th>config/learning_rate</th>\n",
       "      <th>config/n_pool_kernel_size</th>\n",
       "      <th>config/n_freq_downsample</th>\n",
       "      <th>config/val_check_steps</th>\n",
       "      <th>config/random_seed</th>\n",
       "      <th>config/h</th>\n",
       "      <th>config/loss</th>\n",
       "      <th>config/valid_loss</th>\n",
       "      <th>logdir</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>21.948565</td>\n",
       "      <td>11.748630</td>\n",
       "      <td>1732660404</td>\n",
       "      <td>None</td>\n",
       "      <td>False</td>\n",
       "      <td>2</td>\n",
       "      <td>e684ab59</td>\n",
       "      <td>2024-11-26_22-33-24</td>\n",
       "      <td>0.473169</td>\n",
       "      <td>1.742914</td>\n",
       "      <td>...</td>\n",
       "      <td>24</td>\n",
       "      <td>0.000583</td>\n",
       "      <td>(16, 8, 1)</td>\n",
       "      <td>(1, 1, 1)</td>\n",
       "      <td>50</td>\n",
       "      <td>9</td>\n",
       "      <td>12</td>\n",
       "      <td>MAE()</td>\n",
       "      <td>MAE()</td>\n",
       "      <td>e684ab59</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>23.497557</td>\n",
       "      <td>13.491600</td>\n",
       "      <td>1732660411</td>\n",
       "      <td>None</td>\n",
       "      <td>False</td>\n",
       "      <td>2</td>\n",
       "      <td>28016d96</td>\n",
       "      <td>2024-11-26_22-33-31</td>\n",
       "      <td>0.467711</td>\n",
       "      <td>1.767644</td>\n",
       "      <td>...</td>\n",
       "      <td>24</td>\n",
       "      <td>0.000222</td>\n",
       "      <td>(16, 8, 1)</td>\n",
       "      <td>(168, 24, 1)</td>\n",
       "      <td>50</td>\n",
       "      <td>5</td>\n",
       "      <td>12</td>\n",
       "      <td>MAE()</td>\n",
       "      <td>MAE()</td>\n",
       "      <td>28016d96</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>29.214516</td>\n",
       "      <td>16.968582</td>\n",
       "      <td>1732660419</td>\n",
       "      <td>None</td>\n",
       "      <td>False</td>\n",
       "      <td>2</td>\n",
       "      <td>ded66a42</td>\n",
       "      <td>2024-11-26_22-33-39</td>\n",
       "      <td>0.969751</td>\n",
       "      <td>2.623766</td>\n",
       "      <td>...</td>\n",
       "      <td>24</td>\n",
       "      <td>0.009816</td>\n",
       "      <td>(16, 8, 1)</td>\n",
       "      <td>(24, 12, 1)</td>\n",
       "      <td>50</td>\n",
       "      <td>5</td>\n",
       "      <td>12</td>\n",
       "      <td>MAE()</td>\n",
       "      <td>MAE()</td>\n",
       "      <td>ded66a42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>45.178616</td>\n",
       "      <td>28.338690</td>\n",
       "      <td>1732660427</td>\n",
       "      <td>None</td>\n",
       "      <td>False</td>\n",
       "      <td>2</td>\n",
       "      <td>2964d41f</td>\n",
       "      <td>2024-11-26_22-33-47</td>\n",
       "      <td>0.985556</td>\n",
       "      <td>2.656381</td>\n",
       "      <td>...</td>\n",
       "      <td>24</td>\n",
       "      <td>0.012083</td>\n",
       "      <td>(16, 8, 1)</td>\n",
       "      <td>(24, 12, 1)</td>\n",
       "      <td>50</td>\n",
       "      <td>7</td>\n",
       "      <td>12</td>\n",
       "      <td>MAE()</td>\n",
       "      <td>MAE()</td>\n",
       "      <td>2964d41f</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>32.580570</td>\n",
       "      <td>21.667740</td>\n",
       "      <td>1732660434</td>\n",
       "      <td>None</td>\n",
       "      <td>False</td>\n",
       "      <td>2</td>\n",
       "      <td>766cc549</td>\n",
       "      <td>2024-11-26_22-33-54</td>\n",
       "      <td>0.418154</td>\n",
       "      <td>1.465539</td>\n",
       "      <td>...</td>\n",
       "      <td>24</td>\n",
       "      <td>0.000040</td>\n",
       "      <td>(2, 2, 2)</td>\n",
       "      <td>(1, 1, 1)</td>\n",
       "      <td>50</td>\n",
       "      <td>4</td>\n",
       "      <td>12</td>\n",
       "      <td>MAE()</td>\n",
       "      <td>MAE()</td>\n",
       "      <td>766cc549</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 26 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        loss  train_loss   timestamp checkpoint_dir_name   done  \\\n",
       "0  21.948565   11.748630  1732660404                None  False   \n",
       "1  23.497557   13.491600  1732660411                None  False   \n",
       "2  29.214516   16.968582  1732660419                None  False   \n",
       "3  45.178616   28.338690  1732660427                None  False   \n",
       "4  32.580570   21.667740  1732660434                None  False   \n",
       "\n",
       "   training_iteration  trial_id                 date  time_this_iter_s  \\\n",
       "0                   2  e684ab59  2024-11-26_22-33-24          0.473169   \n",
       "1                   2  28016d96  2024-11-26_22-33-31          0.467711   \n",
       "2                   2  ded66a42  2024-11-26_22-33-39          0.969751   \n",
       "3                   2  2964d41f  2024-11-26_22-33-47          0.985556   \n",
       "4                   2  766cc549  2024-11-26_22-33-54          0.418154   \n",
       "\n",
       "   time_total_s  ...  config/input_size config/learning_rate  \\\n",
       "0      1.742914  ...                 24             0.000583   \n",
       "1      1.767644  ...                 24             0.000222   \n",
       "2      2.623766  ...                 24             0.009816   \n",
       "3      2.656381  ...                 24             0.012083   \n",
       "4      1.465539  ...                 24             0.000040   \n",
       "\n",
       "  config/n_pool_kernel_size  config/n_freq_downsample  config/val_check_steps  \\\n",
       "0                (16, 8, 1)                 (1, 1, 1)                      50   \n",
       "1                (16, 8, 1)              (168, 24, 1)                      50   \n",
       "2                (16, 8, 1)               (24, 12, 1)                      50   \n",
       "3                (16, 8, 1)               (24, 12, 1)                      50   \n",
       "4                 (2, 2, 2)                 (1, 1, 1)                      50   \n",
       "\n",
       "   config/random_seed  config/h  config/loss config/valid_loss    logdir  \n",
       "0                   9        12        MAE()             MAE()  e684ab59  \n",
       "1                   5        12        MAE()             MAE()  28016d96  \n",
       "2                   5        12        MAE()             MAE()  ded66a42  \n",
       "3                   7        12        MAE()             MAE()  2964d41f  \n",
       "4                   4        12        MAE()             MAE()  766cc549  \n",
       "\n",
       "[5 rows x 26 columns]"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results = nf.models[0].results.get_dataframe()\n",
    "results.head()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we use the `predict` method to forecast the next 12 months using the optimal hyperparameters."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c3b3486b976847deb4fc0297e3b7e09a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Predicting: |                                                                                                 …"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>unique_id</th>\n",
       "      <th>ds</th>\n",
       "      <th>AutoNHITS</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1961-01-31</td>\n",
       "      <td>438.724091</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1961-02-28</td>\n",
       "      <td>415.593628</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1961-03-31</td>\n",
       "      <td>493.484894</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1961-04-30</td>\n",
       "      <td>493.120728</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1961-05-31</td>\n",
       "      <td>499.806702</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   unique_id         ds   AutoNHITS\n",
       "0        1.0 1961-01-31  438.724091\n",
       "1        1.0 1961-02-28  415.593628\n",
       "2        1.0 1961-03-31  493.484894\n",
       "3        1.0 1961-04-30  493.120728\n",
       "4        1.0 1961-05-31  499.806702"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Y_hat_df = nf.predict()\n",
    "Y_hat_df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. `Optuna` backend"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this section we show how to use the `Optuna` backend. `Optuna` is a lightweight and versatile platform for hyperparameter optimization. If you plan to use the `Tune` backend, you can skip this section."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.a Define hyperparameter grid"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Each `Auto` model contains a default search space that was extensively tested on multiple large-scale datasets. Search spaces are specified with a function that returns a dictionary, where keys corresponds to the model's hyperparameter and the value is a `suggest` function to specify how the hyperparameter will be sampled. For example, use `suggest_int` to sample integers uniformly, and `suggest_categorical` to sample values of a list. See https://optuna.readthedocs.io/en/stable/reference/generated/optuna.trial.Trial.html for more details."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.a.1 Default hyperparameter grid\n",
    "\n",
    "The default search space dictionary can be accessed through the `get_default_config` function of the `Auto` model. This is useful if you wish to use the default parameter configuration but want to change one or more hyperparameter spaces without changing the other default values.\n",
    "\n",
    "To extract the default config, you need to define:\n",
    "* `h`: forecasting horizon.\n",
    "* `backend`: backend to use.\n",
    "* `n_series`: Optional, the number of unique time series, required only for Multivariate models. \n",
    "\n",
    "In this example, we will use `h=12` and we use `optuna` as backend. We will use the default hyperparameter space but only change `random_seed` range and `n_pool_kernel_size`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import optuna"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "optuna.logging.set_verbosity(optuna.logging.WARNING) # Use this to disable training prints from optuna\n",
    "nhits_default_config = AutoNHITS.get_default_config(h = 12, backend=\"optuna\")                   # Extract the default hyperparameter settings\n",
    "\n",
    "def config_nhits(trial):\n",
    "    config = {**nhits_default_config(trial)}\n",
    "    config.update({\n",
    "        \"random_seed\": trial.suggest_int(\"random_seed\", 1, 10), \n",
    "        \"n_pool_kernel_size\": trial.suggest_categorical(\"n_pool_kernel_size\", [[2, 2, 2], [16, 8, 1]])\n",
    "    })\n",
    "    return config    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.a.2 Custom hyperparameter grid\n",
    "\n",
    "More generally, users can define fully customized search spaces tailored for particular datasets and tasks, by fully specifying a hyperparameter search space function.\n",
    "\n",
    "In the following example we are optimizing the `learning_rate` and two `NHITS` specific hyperparameters: `n_pool_kernel_size` and `n_freq_downsample`. Additionaly, we use the search space to modify default hyperparameters, such as `max_steps` and `val_check_steps`. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def config_nhits(trial):\n",
    "    return {\n",
    "        \"max_steps\": 100,                                                                                               # Number of SGD steps\n",
    "        \"input_size\": 24,                                                                                               # Size of input window\n",
    "        \"learning_rate\": trial.suggest_loguniform(\"learning_rate\", 1e-5, 1e-1),                                         # Initial Learning rate\n",
    "        \"n_pool_kernel_size\": trial.suggest_categorical(\"n_pool_kernel_size\", [[2, 2, 2], [16, 8, 1]]),                 # MaxPool's Kernelsize\n",
    "        \"n_freq_downsample\": trial.suggest_categorical(\"n_freq_downsample\", [[168, 24, 1], [24, 12, 1], [1, 1, 1]]),    # Interpolation expressivity ratios\n",
    "        \"val_check_steps\": 50,                                                                                          # Compute validation every 50 steps\n",
    "        \"random_seed\": trial.suggest_int(\"random_seed\", 1, 10),                                                         # Random seed\n",
    "    }"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.b Instantiate `Auto` model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To instantiate an `Auto` model you need to define:\n",
    "\n",
    "* `h`: forecasting horizon.\n",
    "* `loss`: training and validation loss from `neuralforecast.losses.pytorch`.\n",
    "* `config`: hyperparameter search space. If `None`, the `Auto` class will use a pre-defined suggested hyperparameter space.\n",
    "* `search_alg`: search algorithm (from `optuna.samplers`), default is TPESampler (Tree-structured Parzen Estimator). Refer to https://optuna.readthedocs.io/en/stable/reference/samplers/index.html for more information on the different search algorithm options.\n",
    "* `backend`: backend to use, default is `ray`. If `optuna`, the `Auto` class will use the `Optuna` backend.\n",
    "* `num_samples`: number of configurations explored."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = AutoNHITS(\n",
    "    h=12,\n",
    "    loss=MAE(),\n",
    "    config=config_nhits,\n",
    "    search_alg=optuna.samplers.TPESampler(seed=0),\n",
    "    backend='optuna',\n",
    "    num_samples=10,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    ":::{.callout-important}\n",
    "Configuration dictionaries and search algorithms for `Tune` and `Optuna` are not interchangeable! Use the appropriate type of search algorithm and custom configuration dictionary for each backend.\n",
    ":::"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.c Train model and predict with `Core` class"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Use the `val_size` parameter of the `fit` method to control the length of the validation set. In this case we set the validation set as twice the forecasting horizon."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%%capture\n",
    "nf = NeuralForecast(models=[model], freq='ME')\n",
    "nf.fit(df=Y_df, val_size=24)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The results of the hyperparameter tuning are available in the `results` attribute of the `Auto` model. Use the `trials_dataframe` method to get the results in a pandas dataframe."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>number</th>\n",
       "      <th>value</th>\n",
       "      <th>datetime_start</th>\n",
       "      <th>datetime_complete</th>\n",
       "      <th>duration</th>\n",
       "      <th>params_learning_rate</th>\n",
       "      <th>params_n_freq_downsample</th>\n",
       "      <th>params_n_pool_kernel_size</th>\n",
       "      <th>params_random_seed</th>\n",
       "      <th>user_attrs_METRICS</th>\n",
       "      <th>state</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>1.827570e+01</td>\n",
       "      <td>2024-11-26 22:34:29.382448</td>\n",
       "      <td>2024-11-26 22:34:30.773811</td>\n",
       "      <td>0 days 00:00:01.391363</td>\n",
       "      <td>0.001568</td>\n",
       "      <td>[1, 1, 1]</td>\n",
       "      <td>[2, 2, 2]</td>\n",
       "      <td>5</td>\n",
       "      <td>{'loss': tensor(18.2757), 'train_loss': tensor...</td>\n",
       "      <td>COMPLETE</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>9.055198e+06</td>\n",
       "      <td>2024-11-26 22:34:30.774153</td>\n",
       "      <td>2024-11-26 22:34:32.090132</td>\n",
       "      <td>0 days 00:00:01.315979</td>\n",
       "      <td>0.036906</td>\n",
       "      <td>[168, 24, 1]</td>\n",
       "      <td>[2, 2, 2]</td>\n",
       "      <td>10</td>\n",
       "      <td>{'loss': tensor(9055198.), 'train_loss': tenso...</td>\n",
       "      <td>COMPLETE</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>5.554298e+01</td>\n",
       "      <td>2024-11-26 22:34:32.090466</td>\n",
       "      <td>2024-11-26 22:34:33.425103</td>\n",
       "      <td>0 days 00:00:01.334637</td>\n",
       "      <td>0.000019</td>\n",
       "      <td>[1, 1, 1]</td>\n",
       "      <td>[2, 2, 2]</td>\n",
       "      <td>10</td>\n",
       "      <td>{'loss': tensor(55.5430), 'train_loss': tensor...</td>\n",
       "      <td>COMPLETE</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>9.857751e+01</td>\n",
       "      <td>2024-11-26 22:34:33.425460</td>\n",
       "      <td>2024-11-26 22:34:34.962057</td>\n",
       "      <td>0 days 00:00:01.536597</td>\n",
       "      <td>0.015727</td>\n",
       "      <td>[24, 12, 1]</td>\n",
       "      <td>[16, 8, 1]</td>\n",
       "      <td>10</td>\n",
       "      <td>{'loss': tensor(98.5775), 'train_loss': tensor...</td>\n",
       "      <td>COMPLETE</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>1.966841e+01</td>\n",
       "      <td>2024-11-26 22:34:34.962357</td>\n",
       "      <td>2024-11-26 22:34:36.951450</td>\n",
       "      <td>0 days 00:00:01.989093</td>\n",
       "      <td>0.001223</td>\n",
       "      <td>[168, 24, 1]</td>\n",
       "      <td>[2, 2, 2]</td>\n",
       "      <td>1</td>\n",
       "      <td>{'loss': tensor(19.6684), 'train_loss': tensor...</td>\n",
       "      <td>COMPLETE</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>5</td>\n",
       "      <td>1.524971e+01</td>\n",
       "      <td>2024-11-26 22:34:36.951775</td>\n",
       "      <td>2024-11-26 22:34:38.280982</td>\n",
       "      <td>0 days 00:00:01.329207</td>\n",
       "      <td>0.002955</td>\n",
       "      <td>[168, 24, 1]</td>\n",
       "      <td>[16, 8, 1]</td>\n",
       "      <td>5</td>\n",
       "      <td>{'loss': tensor(15.2497), 'train_loss': tensor...</td>\n",
       "      <td>COMPLETE</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>6</td>\n",
       "      <td>1.678810e+01</td>\n",
       "      <td>2024-11-26 22:34:38.281381</td>\n",
       "      <td>2024-11-26 22:34:39.648595</td>\n",
       "      <td>0 days 00:00:01.367214</td>\n",
       "      <td>0.006173</td>\n",
       "      <td>[168, 24, 1]</td>\n",
       "      <td>[16, 8, 1]</td>\n",
       "      <td>4</td>\n",
       "      <td>{'loss': tensor(16.7881), 'train_loss': tensor...</td>\n",
       "      <td>COMPLETE</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>7</td>\n",
       "      <td>2.014485e+01</td>\n",
       "      <td>2024-11-26 22:34:39.649025</td>\n",
       "      <td>2024-11-26 22:34:41.075568</td>\n",
       "      <td>0 days 00:00:01.426543</td>\n",
       "      <td>0.000285</td>\n",
       "      <td>[168, 24, 1]</td>\n",
       "      <td>[2, 2, 2]</td>\n",
       "      <td>2</td>\n",
       "      <td>{'loss': tensor(20.1448), 'train_loss': tensor...</td>\n",
       "      <td>COMPLETE</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>8</td>\n",
       "      <td>2.109382e+01</td>\n",
       "      <td>2024-11-26 22:34:41.075891</td>\n",
       "      <td>2024-11-26 22:34:42.449451</td>\n",
       "      <td>0 days 00:00:01.373560</td>\n",
       "      <td>0.004097</td>\n",
       "      <td>[168, 24, 1]</td>\n",
       "      <td>[16, 8, 1]</td>\n",
       "      <td>7</td>\n",
       "      <td>{'loss': tensor(21.0938), 'train_loss': tensor...</td>\n",
       "      <td>COMPLETE</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>9</td>\n",
       "      <td>5.091650e+01</td>\n",
       "      <td>2024-11-26 22:34:42.449762</td>\n",
       "      <td>2024-11-26 22:34:43.804981</td>\n",
       "      <td>0 days 00:00:01.355219</td>\n",
       "      <td>0.000036</td>\n",
       "      <td>[1, 1, 1]</td>\n",
       "      <td>[16, 8, 1]</td>\n",
       "      <td>1</td>\n",
       "      <td>{'loss': tensor(50.9165), 'train_loss': tensor...</td>\n",
       "      <td>COMPLETE</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   number         value             datetime_start          datetime_complete  \\\n",
       "0       0  1.827570e+01 2024-11-26 22:34:29.382448 2024-11-26 22:34:30.773811   \n",
       "1       1  9.055198e+06 2024-11-26 22:34:30.774153 2024-11-26 22:34:32.090132   \n",
       "2       2  5.554298e+01 2024-11-26 22:34:32.090466 2024-11-26 22:34:33.425103   \n",
       "3       3  9.857751e+01 2024-11-26 22:34:33.425460 2024-11-26 22:34:34.962057   \n",
       "4       4  1.966841e+01 2024-11-26 22:34:34.962357 2024-11-26 22:34:36.951450   \n",
       "5       5  1.524971e+01 2024-11-26 22:34:36.951775 2024-11-26 22:34:38.280982   \n",
       "6       6  1.678810e+01 2024-11-26 22:34:38.281381 2024-11-26 22:34:39.648595   \n",
       "7       7  2.014485e+01 2024-11-26 22:34:39.649025 2024-11-26 22:34:41.075568   \n",
       "8       8  2.109382e+01 2024-11-26 22:34:41.075891 2024-11-26 22:34:42.449451   \n",
       "9       9  5.091650e+01 2024-11-26 22:34:42.449762 2024-11-26 22:34:43.804981   \n",
       "\n",
       "                duration  params_learning_rate params_n_freq_downsample  \\\n",
       "0 0 days 00:00:01.391363              0.001568                [1, 1, 1]   \n",
       "1 0 days 00:00:01.315979              0.036906             [168, 24, 1]   \n",
       "2 0 days 00:00:01.334637              0.000019                [1, 1, 1]   \n",
       "3 0 days 00:00:01.536597              0.015727              [24, 12, 1]   \n",
       "4 0 days 00:00:01.989093              0.001223             [168, 24, 1]   \n",
       "5 0 days 00:00:01.329207              0.002955             [168, 24, 1]   \n",
       "6 0 days 00:00:01.367214              0.006173             [168, 24, 1]   \n",
       "7 0 days 00:00:01.426543              0.000285             [168, 24, 1]   \n",
       "8 0 days 00:00:01.373560              0.004097             [168, 24, 1]   \n",
       "9 0 days 00:00:01.355219              0.000036                [1, 1, 1]   \n",
       "\n",
       "  params_n_pool_kernel_size  params_random_seed  \\\n",
       "0                 [2, 2, 2]                   5   \n",
       "1                 [2, 2, 2]                  10   \n",
       "2                 [2, 2, 2]                  10   \n",
       "3                [16, 8, 1]                  10   \n",
       "4                 [2, 2, 2]                   1   \n",
       "5                [16, 8, 1]                   5   \n",
       "6                [16, 8, 1]                   4   \n",
       "7                 [2, 2, 2]                   2   \n",
       "8                [16, 8, 1]                   7   \n",
       "9                [16, 8, 1]                   1   \n",
       "\n",
       "                                  user_attrs_METRICS     state  \n",
       "0  {'loss': tensor(18.2757), 'train_loss': tensor...  COMPLETE  \n",
       "1  {'loss': tensor(9055198.), 'train_loss': tenso...  COMPLETE  \n",
       "2  {'loss': tensor(55.5430), 'train_loss': tensor...  COMPLETE  \n",
       "3  {'loss': tensor(98.5775), 'train_loss': tensor...  COMPLETE  \n",
       "4  {'loss': tensor(19.6684), 'train_loss': tensor...  COMPLETE  \n",
       "5  {'loss': tensor(15.2497), 'train_loss': tensor...  COMPLETE  \n",
       "6  {'loss': tensor(16.7881), 'train_loss': tensor...  COMPLETE  \n",
       "7  {'loss': tensor(20.1448), 'train_loss': tensor...  COMPLETE  \n",
       "8  {'loss': tensor(21.0938), 'train_loss': tensor...  COMPLETE  \n",
       "9  {'loss': tensor(50.9165), 'train_loss': tensor...  COMPLETE  "
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results = nf.models[0].results.trials_dataframe()\n",
    "results.drop(columns='user_attrs_ALL_PARAMS')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we use the `predict` method to forecast the next 12 months using the optimal hyperparameters."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "d3f3cde4b19b432eac747f3658bba158",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Predicting: |                                                                                                 …"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>unique_id</th>\n",
       "      <th>ds</th>\n",
       "      <th>AutoNHITS</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1961-01-31</td>\n",
       "      <td>446.410736</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1961-02-28</td>\n",
       "      <td>422.048523</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1961-03-31</td>\n",
       "      <td>508.271515</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1961-04-30</td>\n",
       "      <td>496.549133</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1961-05-31</td>\n",
       "      <td>506.865723</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   unique_id         ds   AutoNHITS\n",
       "0        1.0 1961-01-31  446.410736\n",
       "1        1.0 1961-02-28  422.048523\n",
       "2        1.0 1961-03-31  508.271515\n",
       "3        1.0 1961-04-30  496.549133\n",
       "4        1.0 1961-05-31  506.865723"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Y_hat_df_optuna = nf.predict()\n",
    "Y_hat_df_optuna.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. Plots"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, we compare the forecasts produced by the `AutoNHITS` model with both backends."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from utilsforecast.plotting import plot_series"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABxsAAAFpCAYAAABEckaoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAADjLElEQVR4nOzdd3iUZdbH8e+U9EpI7wm9hV6liKIosIqiWFDBuquoq66u62tZdV3brnXXLoJYsKMCFoqA0nuRJj29kN7bzPvHJCNZWhImmZTf57rmuswzz3Pf50kGiHPmnGOwWq1WREREREREREREREREREQayOjsAERERERERERERERERESkdVKyUUREREREREREREREREQaRclGEREREREREREREREREWkUJRtFREREREREREREREREpFGUbBQRERERERERERERERGRRlGyUUREREREREREREREREQaRclGEREREREREREREREREWkUJRtFREREREREREREREREpFGUbBQRERERERERERERERGRRlGyUUREREREmsScOXMwGAwcOXLE2aHUy5EjRzAYDMyZM+eM586YMYPY2Ngmj0lERERERESkpVOyUURERERExIneeOMNrrzySqKjozEYDMyYMaNB11ssFp5//nni4uJwd3cnISGBefPmNU2wIiIiIiIiIv/D7OwARERERESkbbr++uu5+uqrcXNzc3Yo9RITE0NpaSkuLi7Nuu9zzz1HYWEhQ4YMIS0trcHXP/zwwzz77LPceuutDB48mG+++YZrr70Wg8HA1Vdf3QQRi4iIiIiIiPxOyUYREREREWkSJpMJk8nk7DDqzWAw4O7u3uz7rly50l7V6O3t3aBrU1JSeOGFF5g5cyb//e9/AbjlllsYM2YMDzzwAFdeeWWr+hmIiIiIiIhI66M2qiIiIiIiApx6DuHjjz+OwWCwf20wGLjzzjv5+uuv6d27N25ubvTq1YsffvihznUnm9lotVp56qmniIyMxNPTk7Fjx7Jr1y5iY2PrtA/93z1PtybA999/z6hRo/Dy8sLHx4eJEyeya9euBt3/qWY21t6nu7s7vXv3Zv78+Q1a90xiYmJOeq/18c0331BZWckdd9xhP2YwGLj99ttJTk5m7dq1jgpTRERERERE5KRU2SgiIiIiIg22atUqvvrqK+644w58fHx49dVXmTJlComJiXTs2PGU1z322GM89dRTTJgwgQkTJrBlyxYuvPBCKioqGh3LBx98wPTp0xk/fjzPPfccJSUlvPHGG4wcOZKtW7eeNIFaX4sXL2bKlCn07NmTZ555huzsbG688UYiIyNPODc3N5fq6uozrunp6Ymnp2ejYzre1q1b8fLyokePHnWODxkyxP78yJEjHbKXiIiIiIiIyMko2SgiIiIiIg22Z88edu/eTadOnQAYO3Ysffv2Zd68edx5550nvSYrK4vnn3+eiRMnsmDBAns138MPP8zTTz/dqDiKioq4++67ueWWW3j77bftx6dPn063bt14+umn6xxvqAcffJCQkBBWrVqFn58fAGPGjOHCCy8kJiamzrn9+/fn6NGjZ1zz73//O48//nijYzpeWloaISEhJ1RGhoWFAZCamuqQfURERERERERORclGERERERFpsHHjxtkTjQAJCQn4+vpy6NChU16zdOlSKioquOuuu+okx+65555GJxuXLFlCXl4e11xzDceOHbMfN5lMDB06lOXLlzdqXbAl8rZt28bf/vY3e6IR4IILLqBnz54UFxfXOf+jjz6itLT0jOvGx8c3Oqb/VVpaipub2wnHa2dP1iceERERERERkbOhZKOIiIiIiDRYdHT0Ccc6dOhAbm7uKa+prfrr0qVLneNBQUF06NChUXHs378fgPPOO++kz/v6+jZqXTh1vADdunVjy5YtdY6dc845jd6rsTw8PCgvLz/heFlZmf15ERERERERkaakZKOIiIiIiACc0Iqz1snmEJpMppOea7VamzUWi8UC2OY2hoaGnnC+2dx8/8uTlZVVr5mN3t7eeHt7O2TPsLAwli9fjtVqrfM9S0tLAyA8PNwh+4iIiIiIiIicipKNIiIiIiIC2CoT8/LyTjhenzmE9VE743D//v11WolmZWWdUBFZW+mYl5eHv7//KWOpbeUaHBzMuHHjHBLnyeL9X/v27Tvh2ODBg5t9ZmO/fv1499132bNnDz179rQfX79+vf15ERERERERkaakZKOIiIiIiAC2xF1+fj47duwgISEBsFXIzZ8/3yHrjxs3DhcXF/7zn/9w4YUX2ivxXn755ZPGAvDzzz9zySWXAFBcXMz7779f57zx48fj6+vL008/zdixY3FxcanzfFZWFkFBQY2KNywsjH79+vH+++/Xmdu4ZMkSdu/ebU9G1mrqmY35+fmkpaURFhZmj+XSSy/l3nvv5fXXX+e///0vYKsuffPNN4mIiGDEiBGN2ktERERERESkvpRsFBERERERAK6++moefPBBLrvsMu6++25KSkp444036Nq16wnzCRsjKCiI+++/n2eeeYZJkyYxYcIEtm7dyvfff09gYGCdcy+88EKio6O5+eabeeCBBzCZTLz33nsEBQWRmJhoP8/X15c33niD66+/ngEDBnD11Vfbz1m0aBHnnHOOPQnXGM888wwTJ05k5MiR3HTTTeTk5PCf//yHXr16UVRUVOfcxs5sXLBgAdu3bwegsrKSHTt28NRTTwFwySWX2BO/8+fP58Ybb2T27NnMmDEDgMjISO655x7+9a9/UVlZyeDBg/n666/55Zdf+Oijj07Z7lZERERERJqO1WqlqqqqXmMWRFoik8mE2Ww+5YiT/6Vko4iIiIiIANCxY0fmz5/Pfffdx1//+lfi4uJ45pln2L9/v0OSjQBPPfUU7u7uvPnmmyxfvpyhQ4eyePFiJk6cWOc8FxcX5s+fzx133MGjjz5KaGgo99xzDx06dODGG2+sc+61115LeHg4zz77LP/6178oLy8nIiKCUaNGnXBuQ1100UV8/vnnPPLIIzz00EN06tSJ2bNn880337BixYqzWrvWl19+Wadic+vWrWzduhWwJRNrk42n8uyzz9KhQwfeeust5syZQ5cuXfjwww+59tprHRKfiIiIiIjUX0VFBWlpaZSUlDg7FJGz4unpSVhYGK6urmc812C1Wq3NEJOIiIiIiMgpxcbGcu655zJnzhxnhyIiIiIiItIoFouF/fv3YzKZCAoKwtXVtd6VYSIthdVqpaKigqysLKqrq+nSpQtGo/G016iyUURERERERERERERE5CxVVFRgsViIiorC09PT2eGINJqHhwcuLi4cPXqUiooK3N3dT3u+ko0iIiIiItKmVVRUkJOTc9pz/Pz88PDwaKaIRERERESkLTtTFZhIa9CQ17GSjSIiIiIi0qatWbOGsWPHnvac2bNnM2PGjOYJSERERERERKQNUbJRRERERESc7siRI022dt++fVmyZMlpz+nVq1eT7S8iIiIiIiLSlinZKCIiIiIibVqHDh0YN26cs8MQERERERERaZPUOFhEREREREREREREREREGkWVjYDFYiE1NRUfHx8MBoOzwxEREREREREREREREQewWq0UFhYSHh6O0aj6K5GmoGQjkJqaSlRUlLPDEBERERERERERERGRJpCUlERkZGSz7mm1WimtrG7WPWt5uJjqXVw1d+5c7r33XlJTU3Fzc7Mfnzx5Mj4+PnzwwQdNFaa0EU5NNsbGxnL06NETjt9xxx289tprlJWV8Ze//IVPPvmE8vJyxo8fz+uvv05ISIj93MTERG6//XaWL1+Ot7c306dP55lnnsFsrv+t+fj4ALa/bHx9fc/+xkRERERERERERERExOkKCgqIioqy5wGaU2llNT0f+7HZ9wXY/eR4PF3rlye58sorufvuu/n222+58sorAcjMzGTRokUsXry4KcOUNsKpycaNGzdSXf17Vv/XX3/lggsusL+Y7733XhYtWsTnn3+On58fd955J5dffjmrV68GoLq6mokTJxIaGsqaNWtIS0vjhhtuwMXFhaeffrrecdRm9319fZVsFBERERERERERERFpYzRC7dQ8PDy49tprmT17tj0/8+GHHxIdHc25557r3OCkVTBYrVars4Oodc8997Bw4UL2799PQUEBQUFBfPzxx1xxxRUA7N27lx49erB27VqGDRvG999/z6RJk0hNTbVXO7755ps8+OCDZGVl4erqetJ9ysvLKS8vt39d+8mG/Px8JRtFRERERERERERERNqIgoIC/Pz8muX9/7KyMg4fPkxcXBzu7u6tpo0qwNatWxk8eDBHjx4lIiKChIQErrzySh599NEmjFJasv99PZ9Oi5mGWlFRwYcffshNN92EwWBg8+bNVFZWMm7cOPs53bt3Jzo6mrVr1wKwdu1a+vTpU6et6vjx4ykoKGDXrl2n3OuZZ57Bz8/P/tC8RhERERERERERERERcSSDwYCnq9kpj4ZWcvbv35++ffsyd+5cNm/ezK5du5gxY0bTfGOkzWkxycavv/6avLw8+4s3PT0dV1dX/P3965wXEhJCenq6/ZzjE421z9c+dyoPPfQQ+fn59kdSUpLjbkRERERERERERERERKSVueWWW5gzZw6zZ89m3LhxKtSSemsxycZZs2Zx8cUXEx4e3uR7ubm52eczak6jiIiIiIiIiIiIiIi0d9deey3Jycm888473HTTTc4OR1qRFpFsPHr0KEuXLuWWW26xHwsNDaWiooK8vLw652ZkZBAaGmo/JyMj44Tna58TERERERERERERERGRM/Pz82PKlCl4e3szefJkZ4cjrUiLSDbOnj2b4OBgJk6caD82cOBAXFxcWLZsmf3Yvn37SExMZPjw4QAMHz6cnTt3kpmZaT9nyZIl+Pr60rNnz+a7ARERERERERERERERkVYuJSWFadOm4ebm5uxQpBUxOzsAi8XC7NmzmT59Ombz7+H4+flx8803c9999xEQEICvry933XUXw4cPZ9iwYQBceOGF9OzZk+uvv57nn3+e9PR0HnnkEWbOnKk/CCIiIiIiIiIiIiIiIvWQm5vLihUrWLFiBa+//rqzw5FWxunJxqVLl5KYmHjS/r8vvfQSRqORKVOmUF5ezvjx4+u8yE0mEwsXLuT2229n+PDheHl5MX36dJ588snmvAURERERERERERERaaMObNpLZXkl3Yb3wmhsEc0CRRyuf//+5Obm8txzz9GtWzdnhyOtjMFqtVqdHYSzFRQU4OfnR35+Pr6+vs4OR0RERERERERERERagNKiEt6562WsFiuhnSI4/6YJBEYGOzssaYDmfP+/rKyMw4cPExcXh7u7e5PuJdLUGvJ61scwREREREREREREREROIm1/MlaLrV4n/WAK8x6bxZovVlBVUeXkyEREWg4lG0VERERERERERERETiJtfwoAcf26ED+gK5ZqCxsXrOajR98hee9RJ0cnItIyKNkoIiIiIiIiIiIiInISyfuT+PCiYTzWrytHJo9m1J2X4+XvTV56Dl8+8yFL31tEWXGps8MUEXEqJRtFRERERERERERERP5HdVU1WwtLSArtSDrwz0NpXFFaycE/Tib4gkEA7Fq5jQ8eeov9G/ZgtVqdG7CIiJMo2SgiIiIiIiIiIiIi8j+yjqZzICQAgN7eHvTwcqek2sLsjFz+EhHC+j9NJr9HDMX5xXz32les+OBHJ0csIuIcSjaKiIiIiIiIiIiIiPyP1P3JHAoPAuCmiEB+GtyNz/p2YmyADxbgp7JKXh/am6+uG8+emFC2Ld9CRWm5c4MWEXECs7MDEBERERERERERERFpafYfSiWtWywA5wb4YDAYGB3gw+gAH/YWl/J2UhZfpOfym9nMb2MHEpN2jCuPphPZPca5gYuINDNVNoqIiIiIiIiIiIiIHMdqtbK6sASr0UAns4lwd9c6z3f38uDF7tFsHtGT+2JDADgaFshvh9KcEa6IQ6xduxaTycTEiRMbfO3jjz9Ov379GnzdnDlzMBgMXHTRRXWO5+XlYTAYWLFihf2YwWDg66+/PmGNGTNmMHny5JN+bTAYTvt4/PHHAZg/fz7Dhg3Dz88PHx8fevXqxT333NPg+2mvlGwUERERERERERERETlOwbF89nbwBeD8YP9Tnhfk6sJf48KIslgAWJeZ1wzRiTSNWbNmcdddd/Hzzz+TmprabPuazWaWLl3K8uXLHb52Wlqa/fHyyy/j6+tb59j999/PsmXLuOqqq5gyZQobNmxg8+bN/POf/6SysrJRe1ZUVDj4Llo+JRtFRERERERERERERI6T+luSfV7jeUF+Zzy/n6c7ADvbYZJBTs1qtVJZXuGUh9VqbVCsRUVFfPrpp9x+++1MnDiROXPm2J+bM2cO/v7+dc7/+uuvMRgM9uefeOIJtm/fbq8YrL0+MTGRSy+9FG9vb3x9fZk6dSoZGRl11vLy8uKmm27ib3/7W4O/x2cSGhpqf/j5+WEwGOoc8/b2ZsGCBZxzzjk88MADdOvWja5duzJ58mRee+21eu1RW9X57rvvEhcXh7u77e+DH374gZEjR+Lv70/Hjh2ZNGkSBw8etF933nnnceedd9ZZKysrC1dXV5YtW+a4b0Iz0MxGEREREREREREREZHjbEzMoCg0EFerlWF+3mc8f0RYAAsOp3PYy5OSgmI8fb2aIUpp6aoqKnn9tn85Ze873n4AFzfXM59Y47PPPqN79+5069aN6667jnvuuYeHHnrInlA8nauuuopff/2VH374gaVLlwLg5+eHxWKxJxpXrlxJVVUVM2fO5KqrrqrTHhVsCbvOnTvzxRdfcMUVVzToXs9WaGgoH3/8Mb/++iu9e/du1BoHDhzgyy+/5KuvvsJkMgFQXFzMfffdR0JCAkVFRTz22GNcdtllbNu2DaPRyC233MKdd97JCy+8gJubGwAffvghERERnHfeeQ67v+agykYRERERERERERERkeP8XFgKQH+zEXfTmd9GHxpoq35MDfQj9VDztZ8UcZRZs2Zx3XXXAXDRRReRn5/PypUr63Wth4cH3t7emM1me8Wgh4cHy5YtY+fOnXz88ccMHDiQoUOHMnfuXFauXMnGjRvrrBEeHs6f//xnHn74Yaqqqk651zXXXIO3t3edx0cffdT4GwfuuusuBg8eTJ8+fYiNjeXqq6/mvffeo7y8vN5rVFRUMHfuXPr3709CQgIAU6ZM4fLLL6dz587069eP9957j507d7J7924ALr/8cgC++eYb+zpz5sxhxowZ9UrytiSqbBQRERERERERERERqVFeWs6vXh4AjAsJqNc13bzccbNYKHd1YfPRDDr369KUIUorYXZ14Y63H3Da3vW1b98+NmzYwPz5823Xms1cddVVzJo1i3PPPbfRMezZs4eoqCiioqLsx3r27Im/vz979uxh8ODBdc5/8MEHeeutt3jvvfeYOnXqSdd86aWXGDdu3AnXVVdXNzpOLy8vFi1axMGDB1m+fDnr1q3jL3/5C6+88gpr167F09PzjGvExMQQFBRU59j+/ft57LHHWL9+PceOHcNSM9s1MTGR3r174+7uzvXXX2+/3y1btvDrr7/y7bffNvpenEXJRhERERERERERERGRGocPJJMU0gGAiyKDznC2jclgoDuwHdiUV8RVTReetCIGg6FBrUydZdasWVRVVREeHm4/ZrVacXNz47///S9Go/GEGZCVlZUOj8Pf35+HHnqIJ554gkmTJp30nNDQUDp37lznmI+PD3l5eWe9f6dOnejUqRO33HILDz/8MF27duXTTz/lxhtvPOO1Xl4ntk7+wx/+QExMDO+88w7h4eFYLBZ69+5NxXGzXW+55Rb69etHcnIys2fP5rzzziMmJuas76W5qY2qiIiIiIiIiIiIiEiNpUcyqDaZ6FhZRWdPt3pfN9DPlmzYVW05ITEj0lJVVVUxd+5cXnjhBbZt22Z/bN++nfDwcObNm0dQUBCFhYUUFxfbr9u2bVuddVxdXU+oLuzRowdJSUkkJSXZj+3evZu8vDx69ux50njuuusujEYjr7zyiuNushFiY2Px9PSsc88NkZ2dzb59+3jkkUc4//zz6dGjB7m5uSec16dPHwYNGsQ777zDxx9/zE033XS2oTuFKhtFRERERERERERERGqsLi4Fb0+Gmo0Nmpt2TkQQ7+1NJNHfh8LsAnxr5jiKtGQLFy4kNzeXm2++GT+/uq/ZKVOmMGvWLH788Uc8PT35v//7P+6++27Wr1/PnDlz6pwbGxvL4cOH2bZtG5GRkfj4+DBu3Dj69OnDtGnTePnll6mqquKOO+5gzJgxDBo06KTxuLu788QTTzBz5symuuUTPP7445SUlDBhwgRiYmLIy8vj1VdfpbKykgsuuKBRa3bo0IGOHTvy9ttvExYWRmJiIn/7299Oeu4tt9zCnXfeiZeXF5dddtnZ3IrTqLJRRERERERERERERASwWCzs8HAH4ILQ+s1rrDU4wAeAY/7eHDyY4vDYRJrCrFmzGDdu3AmJRrAlGzdt2kRycjIffvgh3333HX369GHevHk8/vjjJ5x70UUXMXbsWIKCgpg3bx4Gg4FvvvmGDh06MHr0aMaNG0d8fDyffvrpaWOaPn068fHxjrzN0xozZgyHDh3ihhtuoHv37lx88cWkp6ezePFiunXr1qg1jUYjn3zyCZs3b6Z3797ce++9/Otf/zrpuddccw1ms5lrrrkGd3f3s7kVpzFYVc9NQUEBfn5+5Ofn4+vr6+xwRERERERERERERMQJth1M4aLELAwWC3tG9cHf1aVB1/dZsokss5nHcgu44/LRTRSlNERzvv9fVlbG4cOHiYuLa7VJI2l+R44coVOnTmzcuJEBAwY4Oxy7hryeVdkoIiIiIiIiIiIiIgJ8dyQDgPjisgYnGgF6u9gml20pKnVoXCLS9lRWVpKens4jjzzCsGHDWlSisaGUbBQRERERERERERERAVYVlwEw1Ny4t86HdLRVzu0zGrFYLA6LS0Scp1evXnh7e5/08dFHHzV63dWrVxMWFsbGjRt58803HRhx8zM7OwAREREREREREREREWertFjZ5e4KwAVhHRu1xqioYJ47VkByRz9yUo8RGBnsyBBFxAm+++47KisrT/pcSEhIo9c999xzaSuTDpVsFBEREREREREREZF2b3VqFuUuZjzKyjm3W/dGrdHH1xOzxUKpuytbD6dxgZKNIq1eTEyMs0No8dRGVURERERERERERETavUU18xq75xXh4eneqDXcjEbiqqoBWJeR67DYRERaMiUbRURERERERERERJzku51pPP7tLrKLyp0dSru3uqRmXqOL6azW6efpBsCOsoqzjklEpDVQslFERERERERERETECSwWKw/P38mcNUe4+JVfWHPwmLNDareyKio55OICwAWhAWe11oia6w+4uVJVWXXWsYmItHRKNoqIiIiIiIiIiIg4wW+ZheSWVAKQWVjOtHfX8+LifVRVW5wcWfuzPDMPgOCcfHp3iz6rtc6JDAIgI8CX5KMZZxuaiEiLp2SjiIiIiIiIiIiIiBOsPZgNwJC4AK4aFIXVCq/+dIBr31lPal6pk6NrX35MzgKg27F8fAP9zmqtKHdXfCursBiNrDma5ojwRERaNCUbRURERERERERERJxg3SFbsvHcbkE8d0UCr1zdD283MxuO5DDh1V9YsltVcc3BYrWyusQ2M3OYiwmDwXBW6xkMBnpYrQBszCk66/hERFo6JRtFREREREREREREmpnFYmX94RwAhsV3BODSfhEsunskCZF+5JVUcuvcTTz+7S7Kq6qdGWqbt6uolDyDAZfKKkaGBzpkzQF+nra19bOTVmTt2rWYTCYmTpzY4Gsff/xx+vXr1+Dr5syZg8Fg4KKLLqpzPC8vD4PBwIoVK+zHDAYDX3/99QlrzJgxg8mTJ5/0a4PBcNrH448/DsD8+fMZNmwYfn5++Pj40KtXL+65554G309jHTlyBIPBwLZt25ptT0dSslFERERERERERESkme3LKCSvpBJPVxN9In5v2xnT0Ysv/jSCW0fFATBnzREuf30Nh7JUIddUlmcXABCTlk1Ml0iHrDkqMhiAwz6eVJSWO2RNkaY2a9Ys7rrrLn7++WdSU1ObbV+z2czSpUtZvny5w9dOS0uzP15++WV8fX3rHLv//vtZtmwZV111FVOmTGHDhg1s3ryZf/7zn1RWVjo8nrbK6cnGlJQUrrvuOjp27IiHhwd9+vRh06ZN9uetViuPPfYYYWFheHh4MG7cOPbv319njZycHKZNm4avry/+/v7cfPPNFBXpH18RERERERERERFpmWpbqA6KDcDFVPdtWlezkYcn9mT2jMEEeLmyK7WAK95cS0GZ3vhuCkvScwHonJFNUEyoQ9YcGhaAwWql0MuDnQebL2kjLYvVaqW4utopD2tNK9/6Kioq4tNPP+X2229n4sSJzJkzx/7cnDlz8Pf3r3P+119/bW85PGfOHJ544gm2b99urxisvT4xMZFLL70Ub29vfH19mTp1KhkZdVtEe3l5cdNNN/G3v/2twd/jMwkNDbU//Pz8MBgMdY55e3uzYMECzjnnHB544AG6detG165dmTx5Mq+99lq993njjTfo1KkTrq6udOvWjQ8++KDO8waDgTfeeIOLL74YDw8P4uPj+eKLL+zPx8XZPmDSv39/DAYD5557LgDnnnvuCRWWkydPZsaMGfavY2Njefrpp7npppvw8fEhOjqat99+u841Dz74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tilZFaqnUFBWycYjtmq05prXWMtsMnL7mE4AvPXzoROq/1qTgrJKVu7LAuCaIdHceV4XVj04lr//oSdhfu5kFZbz9Hd7OefZn7j2nXWs2JeFu4uRWdMH0znYx8nRn73bRsdjNMDK37LYldqwGZxfbE4mObeUQG83rmtgy+PpI2KZ3C+caouVOz/eQnq+7T3Lfy/+jbWHsvF0NfHW9QPxbsaK3dZmUGwAPm5msosrWLongzlrbFWif7mgK0ajErQiInJ6DU42WiwW/vGPfxAREYG3tzeHDtnK6R999FFmzZpV73WSkpL485//zEcffYS7e/MOZH7ooYfIz8+3P5KSkpp1fxEREREREWl+P+7KYMORHNzMRu4f363e19XO+ftpXyZJOSVNFV67sLimheqFPUObdd+L+4Ti7WYmMaeEDUca196xrVu1/xhVFitxgV7EBXo1+/6XD4i0J+M+39R636dZvCuDimoLXYK96RZqSx56upq58Zw4Vj4wluevSCA+0Iv80ko2HsnFZDTw+rQBDIzpcIaVW4eYjl5MTAgH4M2Vh+p9XUWVhf/+dACAO87t1OAPIxgMBp65PIHuoT4cK6rgjo82s3BHKm+utFVYPn9FQptI5jYlV7OR0V1tFef3f76dskoL/aL8Ob9H8374QEREWqcGJxufeuop5syZw/PPP4+r6+895Hv37s27775b73U2b95MZmYmAwYMwGw2YzabWblyJa+++ipms5mQkBAqKirIy8urc11GRgahobb/KQkNDSUjI+OE52ufOxU3Nzd8fX3rPERERERERKTtqqiy8Oz3tqrGW0fFN6hVYXyQN6O7BmG1wofrjjZViG3e0exi9qYXYjIamv3Na09XM5MSbG0AP9+kVqon46wWqrVczUb+VFPd+ObKQ1RWW5wSx9lauMPWpnlSTcLteK5mI1MHRbHkvjG8Pm0A43qE8Nq1/Tmve/PML20ufxoTD8CiHakkZtfvAxqfbUoiJa+UYB83rh0a3ah9PVxNvHndQHzczWxJzOPOj7cCcPPIuJP+POREtXMba2eO3n9hN7WdFRGRemlwsnHu3Lm8/fbbTJs2DZPp908Z9e3bl71799Z7nfPPP5+dO3eybds2+2PQoEFMmzbN/t8uLi4sW7bMfs2+fftITExk+PDhAAwfPpydO3eSmZlpP2fJkiX4+vrSs2fPht6aiIiIiIiItFEfrjvKkewSAr3d+NO5nRp8/fThturGTzYmUVrRels8OtPimhaqQ+MC8Pd0PcPZjndlTSvV73amUVhW2ez7t2QWi5UV+2zvrZzXzC1Uj3fV4CgCvd1IyStl/tYUp8XRWLnFFazab5vtOqnvqWfcmYwGJvQJ493pg7iod9ubhdcr3I8xXYOwWOHtX848u7G8qprXltuqGmeO7Yy7S+NbLMcGevHyVf3sXw+O7cDfLu7e6PXam3O7BVGbWxwWH8A5nTs6NyAREWk1GpxsTElJoXPnzicct1gsVFbW/5d1Hx8fevfuXefh5eVFx44d6d27N35+ftx8883cd999LF++nM2bN3PjjTcyfPhwhg0bBsCFF15Iz549uf7669m+fTs//vgjjzzyCDNnzsTNza2htyYiIiIiIiJtUH5JJa/+tB+A+y7o2qiZXed2CyYqwIP80koWbE91dIjtwuLdthaq43s1bwvVWgOi/ekU5EVpZTWLdqQ5JYaWamdKPseKKvByNTEkLsBpcbi7mLhtdBwAry8/QHUrm6/54650qixWeoT50inI29nhONXtNR/q+GxTMlmF5ac999ONSaTllxHm585Vg6POeu/ze4Tw/JQEJiaE8dq1A3AxNfjtz3aro7cbY7sF42oy8teLuquqUURE6q3B/9r27NmTX3755YTjX3zxBf3793dIULVeeuklJk2axJQpUxg9ejShoaF89dVX9udNJhMLFy7EZDIxfPhwrrvuOm644QaefPJJh8YhIiIiIiIirdd/l+8nr6SSriHeTB0U2ag1TEaDfXbjnDVHsFpbVxLE2bIKy9l0NBeAC3o6p2WkwWBgak1142eteCZgU6htoTqySyCuZucmZqYNjcHf04Uj2SX2lqStxcKaJHZty972bGhcAP2j/amosjB79eFTnldW+XtV4x1nWdV4vKmDo3jt2gEE+7o7ZL325PVpA1j14FgGRLeNOaIiItI8Gvxxzscee4zp06eTkpKCxWLhq6++Yt++fcydO5eFCxeeVTArVqyo87W7uzuvvfYar7322imviYmJ4bvvvjurfUVERERERKRtSswu4f01tjmL/zehB+azqHCZOiiKFxb/xu60ArYk5jIwxnkVYK3Nsj0ZWK2QEOnXoHmZjnbZgAie/3EfWxLzOJBZSOdgH6fF0pK0hBaqtbzczNx8Thwv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EFuXIlJtKWwE7OxKlq709vbWzVekjLy8vNSORMpAbUik7NSORMpO7Uik7NSORMpGbUik7NSO/keDjEQqlp2tCxARERERERERERERERGRq5PCRhEREREREREREREREREpFYWNgLOzM9OmTcPZ2dnWpYhctdSORMpGbUik7NSORMpO7Uik7NSORMpGbUik7NSORKSymQzDMGxdhIiIiIiIiIiIiIiIiIhcfTSyUURERERERERERERERERKRWGjiIiIiIiIiIiIiIiIiJSKwkYRERERERERERERERERKRWFjSIiIiIiIiIiIiIiIiJSKgobRURERERERERERERERKRUFDaKiIiIyFWhuLgYAMMwbFyJiIiIiIiIiIic52DrAiqaYRiYTKa//F5E/llhYSGffPIJNWrUoF27dtSrV8/WJYlcdYqKiliyZAkBAQE0bdqUoKAgW5ckclUxDAPDMBg/fjwZGRl88803+nlOpJQSEhJwcHDA399fz0YipaQ+BpHypXYkIiJSPZiMavrR8MLCQl588UXy8/OpXbs2Dz74oK1LErmqLF68mHvvvZdGjRoRFxeHh4cHU6ZMYfTo0bYuTeSqMXPmTJ555hkiIiI4dOgQrVu35qmnnqJXr156qBa5ArGxsURERJCXl8d3333HwIEDsVgs2Nlpkg6Ry1FUVMSkSZPYuHEjkydPZty4cbYuSeSqoz4GkbIrLCzknXfewcvLi1atWtGhQwdblyRy1SkqKuKLL77Ax8eHiIgImjRpYuuSRESAajqN6tdff01oaCgbNmzgzJkzTJ48mSlTpgCadkvkchiGwUcffcT48ePZtm0bP//8M8OGDWPChAmsW7fO1uWJVHkFBQW89NJLfPDBB3zwwQesXbuWb7/9loCAAD788EMFjSJXaNu2bfTq1YuHHnqISZMmAShoFLlM0dHRtG3blgMHDjBz5kz69OljHTEsIpdHfQwiZbd8+XJq1qzJN998wzvvvMPAgQOZPn26rcsSuap8+OGHBAUFMWfOHCZPnszgwYP5+uuvAbBYLDauTkSuddWulyY9PZ2ZM2fy8MMPs2bNGubPn8+MGTOYP3++OndF/sYfH5L37dvHpk2bGDJkCABNmzblP//5D7169eKJJ57g7NmztipTpEo7344yMzNJT09n/PjxDBs2DEdHR3r27EndunXJzs6mqKjIxpWK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IteKKjOy8eTJk8ybN48pU6bg6upq63JERERERERsQs9GImWndiRSdmpHImWndiQi14oqEzaKiIiIiIiIiIiIiIiIyNWlykyjKiIiIiIiIiIiIiIiIiJXF4WNIiIiIiIiIiIiIiIiIlIqChtFREREREREREREREREpFQUNoqIiIiIiIiIiIiIiIhIqShsFBEREREREREREREREZFSUdgoIiIiIiIiIiIiIiIiIqWisFFERERERERERERERERESkVho4iIiIiIVDn33HMPgwYNqvTzzps3D5PJhMlkYvLkyX+7b3h4ODNmzLis415//fXW4+7evbvMdYqIiIiIiIhUFQ62LkBERERERK4tJpPpb7dPmzaNt99+G8MwKqmiC3l5eREdHY27u3u5HXPx4sUcP36cDh06lNsxRURERERERKoChY0iIiIiIlKp4uPjrb//6quvmDp1KtHR0dbXPDw88PDwsEVpQEkYGhwcXK7H9PPzIysrq1yPKSIiIiIiIlIVaBpVERERERGpVMHBwdYvb29va7h3/svDw+Mv06hef/31PPjgg0yePBlfX1+CgoKYPXs2ubm5jB49Gk9PTxo0aMCKFSsuONf+/fu5+eab8fDwICgoiJEjR5KSknLFNSclJTFw4EBcXV2pW7cu8+fPv2C7YRj85z//ISwsDGdnZ0JCQnjooYdK9ecjIiIiIiIicjVR2CgiIiIiIleFTz/9FH9/f7Zt28aDDz7I/fffz2233UaXLl3YuXMnffr0YeTIkeTl5QGQkZHBDTfcQOvWrYmKiuKnn34iMTGR22+//YrPfc899xAbG8uaNWv45ptv+OCDD0hKSrJu//bbb3nrrbf48MMPOXr0KEuXLiUyMrLcrl1ERERERESkqtI0qiIiIiIiclVo2bIlzz77LABPPfUUr7zyCv7+/owbNw6AqVOnMnPmTPbu3UunTp147733aN26NS+//LL1GHPmzKF27docOXKERo0aXdZ5jxw5wooVK9i2bRvt27cH4JNPPiEiIsK6z+nTpwkODqZXr144OjoSFham9RlFRERERETkmqCRjSIiIiIiclVo0aKF9ff29vbUqFHjgtGDQUFBANYRh3v27GHNmjXWNSA9PDxo0qQJAMePH7/s8x46dAgHBwfatm1rfa1Jkyb4+PhYv7/ttts4d+4c9erVY9y4cSxZsoTi4uJSXaeIiIiIiIjI1UQjG0VERERE5Krg6Oh4wfcmk+mC10wmEwAWiwWAnJwcBg4cyKuvvvqXY9WsWbNca6tduzbR0dGsXr2aVatWMXHiRF5//XXWrVv3l7pFREREREREqhOFjSIiIiIiUi21adOGb7/9lvDwcBwcSv/o06RJE4qLi9mxY4d1GtXo6GgyMjIu2M/V1ZWBAwcycOBAJk2aRJMmTdi3bx9t2rQpy2WIiIiIiIiIVGmaRlVERERERKqlSZMmkZaWxvDhw9m+fTvHjx9n5cqVjB49GrPZfNnHady4MTfddBMTJkxg69at7Nixg7Fjx+Lq6mrdZ968eXzyySfs37+fmJgYvvjiC1xdXalTp05FXJqIiIiIiIhIlaGwUUREREREqqWQkBA2btyI2WymT58+REZGMnnyZHx8fLCzu7JHoblz5xISEkKPHj0YPHgw48ePJzAw0Lrdx8eH2bNn07VrV1q0aMHq1atZtmwZNWrUKO/LEhEREREREalSTIZhGLYuQkREREREpCqYN28ekydP/ssUqeXh5MmT1K1bl127dtGqVatyP76IiIiIiIiILWhko4iIiIiIyB9kZmbi4eHBlClTyu2YN998M82aNSu344mIiIiIiIhUFRrZKCIiIiIi8rvs7GwSExOBkqlR/f39y+W4Z8+e5dy5cwCEhYXh5ORULscVERERERERsTWFjSIiIiIiIiIiIiIiIiJSKppGVURERERERERERERERERKRWGjiIiIiIiIiIiIiIiIiJSKwkYRERERERERERERERERKRWFjSIiIiIiIiIiIiIiIiJSKgobRURERERERERERERERKRUFDaKiIiIiIiIiIiIiIiISKkobBQRERERERERERERERGRUlHYKCIiIiIiIiIiIiIiIiKl8v+giWA1udrcxQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1600x350 with 1 Axes>"
      ]
     },
     "execution_count": null,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "plot_series(\n",
    "    Y_df,\n",
    "    Y_hat_df.merge(\n",
    "        Y_hat_df_optuna,\n",
    "        on=['unique_id', 'ds'],\n",
    "        suffixes=['_ray', '_optuna'],\n",
    "    ),\n",
    ")"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### References\n",
    "- [Cristian Challu, Kin G. Olivares, Boris N. Oreshkin, Federico Garza, Max Mergenthaler-Canseco, Artur Dubrawski (2021). NHITS: Neural Hierarchical Interpolation for Time Series Forecasting. Accepted at AAAI 2023.](https://arxiv.org/abs/2201.12886)\n",
    "- [James Bergstra, Remi Bardenet, Yoshua Bengio, and Balazs Kegl (2011). \"Algorithms for Hyper-Parameter Optimization\". In: Advances in Neural Information Processing Systems. url: https://proceedings.neurips.cc/paper/2011/file/86e8f7ab32cfd12577bc2619bc635690-Paper.pdf](https://proceedings.neurips.cc/paper/2011/file/86e8f7ab32cfd12577bc2619bc635690-Paper.pdf)\n",
    "- [Kirthevasan Kandasamy, Karun Raju Vysyaraju, Willie Neiswanger, Biswajit Paria, Christopher R. Collins, Jeff Schneider, Barnabas Poczos, Eric P. Xing (2019). \"Tuning Hyperparameters without Grad Students: Scalable and Robust Bayesian Optimisation with Dragonfly\". Journal of Machine Learning Research. url: https://arxiv.org/abs/1903.06694](https://arxiv.org/abs/1903.06694)\n",
    "- [Lisha Li, Kevin Jamieson, Giulia DeSalvo, Afshin Rostamizadeh, Ameet Talwalkar (2016). \"Hyperband: A Novel Bandit-Based Approach to Hyperparameter Optimization\". Journal of Machine Learning Research. url: https://arxiv.org/abs/1603.06560](https://arxiv.org/abs/1603.06560)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "python3",
   "language": "python",
   "name": "python3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
